package com.davidlife.converter;

import org.springframework.core.convert.converter.Converter;
import org.springframework.util.StringUtils;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

/*
* 自定义类型转换器
    + 表单提交的任何数据类型全部都是字符串类型，但是后台定义Integer类型，数据也可以封装上，说明Spring框架内部会默认进行数据类型转换。
    + 如果想自定义数据类型转换，可以实现Converter的接口
        1. 第一步：定义一个类，实现Converter接口，该接口有两个泛型。第一个表示接受的类型，第二个表示目标类型
        2. 第二步：在spring配置文件中配置类型转换器。
        3. 第三步：在annotation-driven标签中引用配置的类型转换服务
 */

/**
 * 把字符串转换成日期的转换器
 */
//注意：Converter<String, Date>中：String表示接受的类型，Date表示目标类型
public class StringToDateConverter implements Converter<String, Date> {
    /**
     * 进行类型转换的方法
     */
    @Override
    public Date convert(String source) {
        // 判断
        if(StringUtils.isEmpty(source)) {
            throw new NullPointerException("请输入要转换的日期");
        }
        try {
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            // 解析字符串
            Date date = df.parse(source);
            return date;
        } catch (Exception e) {
            throw new RuntimeException("输入日期有误");
        }
    }
}
